#pragma once
#include <memory>
#include <string>
#include "../Event/EventManager.h"
#include "Base.hpp"

namespace Kriko
{
	struct WindowProc
	{
		const std::string m_title;
		size_t m_width;
		size_t m_height;

		WindowProc(const std::string& p_title = "Kriko Game Engine",
			size_t p_width = 1280,
			size_t p_height = 720) : m_title(p_title),m_width(p_width), m_height(p_height) {}
	};

	class Window
	{
	public:
		virtual ~Window() = default;
		virtual void VOnUpdate() = 0;

		virtual const size_t VGetWidth() const = 0;
		virtual const size_t VGetHeight() const = 0;

		virtual void SetEventCallBack(const EventListenerDelegate& p_callBackFunc) = 0;
		virtual void VSetVSync(bool p_enabled) = 0;
		virtual bool VIsVsync() const = 0;
		
		virtual void* VGetNativeWindow() const = 0;

		static Scope<Window> Create(const WindowProc& p_props = WindowProc());
	};
}